<!DOCTYPE html>
<html lang="it">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="Una guida semplice per iniziare con git. Niente di complicato!">
    <meta name="keywords" content="git,guida,tutorial,principiante,semplice,controllo versione">
    <title>git - la guida tascabile - niente di complicato!</title>
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Chelsea+Market&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css">
    <link rel="stylesheet" href="css/style.css">
    <script async src="https://www.googletagmanager.com/gtag/js?id=UA-652147-13"></script>
    <script>
        window.dataLayer = window.dataLayer || [];
        function gtag(){dataLayer.push(arguments);}
        gtag('js', new Date());
        gtag('config', 'UA-652147-13');

        function recordOutboundLink(link, category, action) {
            gtag('event', action, {
                'event_category': category,
                'event_label': link.href
            });
            setTimeout(function() {
                document.location = link.href;
            }, 100);
        }
    </script>
</head>

<body>
    <div class="scrollblock block-title">
        <h1>git - la guida tascabile</h1>
        <p>Solamente una piccola guida per iniziare con git. Niente di complicato ;)</p>
        <a href="https://gitcode.com/nutpi/git-guide" class="gitcode-share-button" data-url="https://www.nutpi.net/"
            data-via="nutpi" data-size="large" data-related="nutpi" data-hashtags="git">GitCode</a>
        <script>!function (d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (!d.getElementById(id)) { js = d.createElement(s); js.id = id; js.src = "//platform.gitcode.com/widgets.js"; fjs.parentNode.insertBefore(js, fjs); } }(document, "script", "gitcode-wjs");</script>
        <p class="meta">
            作者：<a href="https://www.nutpi.net/">坚果派</a> (translation by <a
                href="http://www.twitter.com/stecb">@stecb</a>)
            <br />感谢：<a href="https://gitcode.com/nutpi/git-guide">罗杰·杜德勒</a>, <a
                href="http://www.twitter.com/tfnico">@tfnico</a>, <a href="http://www.twitter.com/fhd">@fhd</a>, <a
                href="http://www.namics.com">Namics</a><br />
            this guide in
            <a href="index.html">中文</a>,
            <a href="index.en.html">english</a>,
            <a href="index.de.html">deutsch</a>,
            <a href="index.es.html">español</a>,
            <a href="index.fr.html">français</a>,
            <a href="index.id.html">indonesian</a>,
            <a href="index.nl.html">nederlands</a>,
            <a href="index.pl.html">polski</a>,
            <a href="index.pt_BR.html">português</a>,
            <a href="index.ru.html">русский</a>,
            <a href="index.tr.html">türkçe</a>,
            <br />
            <a href="index.my.html">မြန်မာ</a>,
            <a href="index.ja.html">日本語</a>,

            <a href="index.ko.html">한국어</a>
            <br />
        </p>
        <img src="img/arrow.png" alt="" />
    </div>
    <!-- setup -->
    <a name="setup"></a>
    <div class="scrollblock block-setup">
        <h2>installazione</h2>
        <p>
            <a href="http://git-scm.com/download/mac">Scarica git per OSX</a>
        </p>
        <p>
            <a href="http://msysgit.github.io/">Scarica git per Windows</a>
        </p>
        <p>
            <a href="http://book.git-scm.com/2_installing_git.html">Scarica git for Linux</a>
        </p>
    </div>
    <a name="create"></a>
    <div class="scrollblock block-create">
        <h2>creazione di un nuovo repository</h2>
        <p>
            crea una nuova directory, entraci ed esegui <br />
            <code>git init</code><br />
            per creare un nuovo repository git.
        </p>
    </div>
    <a name="checkout"></a>
    <div class="scrollblock block-checkout">
        <h2>checkout di un repository</h2>
        <p>
            crea una copia di un repository locale eseguendo il comando<br />
            <code>git clone /percorso/del/repository</code><br />
            usando invece un server remoto, il comando sar&agrave;<br />
            <code>git clone nomeutente@host:/percorso/del/repository</code>
        </p>
    </div>
    <a name="trees"></a>
    <div class="scrollblock block-trees">
        <h2>ambiente di lavoro</h2>
        <p>
            la tua copia locale del repository &egrave; composta da tre "alberi" mantenuti da git.
            Il primo &egrave; la tua <code>Directory di lavoro</code> che contiene i files attuali.
            Il secondo &egrave; l'<code>Index</code> che fa da spazio di transito per i files
            e per finire l'<code>HEAD</code> che punta all'ultimo commit fatto.
        </p>
        <img src="img/trees.png" alt="" />
    </div>
    <a name="add"></a>
    <div class="scrollblock block-add">
        <h2>aggiungere &amp; validare</h2>
        <p>
            Puoi proporre modifiche (aggiungendole all'<b>Index</b>) usando<br />
            <code>git add &lt;nomedelfile&gt;</code><br />
            <code>git add *</code><br />
            Questo &egrave; il primo passo nel flusso di lavoro in git. Per validare queste modifiche fatte si usa<br />
            <code>git commit -m "Messaggio per la commit"</code><br />
            Ora il file &egrave; correttamente nell'<b>HEAD</b>, ma non ancora nel repository remoto.
        </p>
    </div>
    <a name="push"></a>
    <div class="scrollblock block-remote">
        <h2>invio delle modifiche</h2>
        <p>
            Quello che hai cambiato ora &egrave; nell'<b>HEAD</b> della copia locale. Per inviare queste modifiche al
            repository remoto, esegui<br />
            <code>git push origin master</code><br />
            Cambia <i>master</i> nel branch al quale vuoi inviare i cambiamenti.
            <br /><br />
            Se non hai copiato un repository esistente, e vuoi connettere il tuo repository ad un server remoto, c'e'
            bisogno che tu lo aggiunga con<br />
            <code>git remote add origin &lt;server&gt;</code><br />
            Ora sarai in grado di inviare le tue modifiche al server remoto specificato<br />

        </p>
    </div>
    <a name="branching"></a>
    <div class="scrollblock block-branching">
        <h2>branching</h2>
        <p>
            I branch ('ramificazioni') sono utilizzati per sviluppare features che sono isolate l'una dall'altra. Il
            branch <i>master</i> &egrave; quello di default quando crei un repository. Puoi usare altri branch per lo
            sviluppo ed infine incorporarli ('merge') nel master branch una volta completati.
        </p>
        <img src="img/branches.png" alt="" />
        <p>
            crea un nuovo branch chiamato "feature_x" e passa al nuovo branch usando<br />
            <code>git checkout -b feature_x</code><br />
            ritorna di nuovo su master<br />
            <code>git checkout master</code><br />
            e cancella il branch creato in precedenza<br />
            <code>git branch -d feature_x</code><br />
            il branch </i>non sar&agrave; disponibile agli altri</i> fino a quando non verr&agrave; inviato al
            repository remoto<br /><br />
            <code>git push origin &lt;branch&gt;</code>
        </p>
    </div>
    <a name="update"></a>
    <div class="scrollblock block-merging">
        <h2>aggiorna &amp; incorpora</h2>
        <p>
            per aggiornare il tuo repository locale alla commit pi&ugrave; recente, esegui<br />
            <code>git pull</code><br />
            nella tua directory corrente per fare una <i>fetch</i> (recuperare) ed incorporare(<i>merge</i>) le
            modifiche fatte sul server remoto. <br />
            per incorporare un altro branch nel tuo branch attivo (ad esempio master), utilizza<br />
            <code>git merge &lt;branch&gt;</code><br />
            in entrambi i casi git prova ad auto-incorporare le modifiche. Sfortunatamente, a volte questa procedura
            automatizzata non &egrave; possibile, ed in questo caso ci saranno dei <i>conflitti</i>.
            Sei tu il responsabile che sistemer&agrave; questi <i>conflitti</i>
            manualmente modificando i file che git mostrer&agrave;. Dopo aver cambiato questi files, dovrai marcarli
            come 'correttamente incorporati' tramite<br />
            <code>git add &lt;nomedelfile&gt;</code><br />
            prima di immettere le modifiche, potrai anche visualizzarne un'anteprima eseguendo<br />
            <code>git diff &lt;branch_sorgente&gt; &lt;branch_target&gt;</code>
        </p>
    </div>
    <a name="tagging"></a>
    <div class="scrollblock block-tagging">
        <h2>tags</h2>
        <p>
            &Egrave; raccomandato creare dei tags nel caso in cui il software venga rilasciato. Questo &egrave; un
            concept gi&agrave; conosciuto, che esiste anche in SVN. Puoi creare un tag chiamato <i>1.0.0</i>
            eseguendo<br />
            <code>git tag 1.0.0 1b2e1d63ff</code><br />
            la sequenza <i>1b2e1d63ff</i> sta per i primi 10 caratteri del commit che si vuol referenziare tramite
            questo tag. Puoi ottenere l'id della commit tramite<br />
            <code>git log</code><br />
            puoi anche utilizzare meno caratteri per l'id della commit, basta che sia unico.
        </p>
    </div>
    <a name="checkout-replace"></a>
    <div class="scrollblock block-checkout-replace">
        <h2>sostituire i cambiamenti locali</h2>
        <p>
            Nel caso tu abbia fatto qualcosa di sbagliato (ma non capita mai, sicuro ;) puoi sostituire i cambiamenti
            fatti in locale con il comando<br />
            <code>git checkout -- &lt;nomedelfile&gt;</code><br />
            questo rimpiazza le modifiche nell'albero di lavoro con l'ultimo contenuto presente in HEAD. I cambiamenti
            fatti ed aggiunti all'index, cos&igrave; come i nuovi files, verranno mantenuti.
        </p>
        <p>
            Se vuoi in alternativa eliminare tutti i cambiamenti e commits fatti in locale, recupera l'ultima versione
            dal server e fai puntare il tuo master branch a quella versione in questo modo<br />
            <code>git fetch origin</code><br />
            <code>git reset --hard origin/master</code>
        </p>
    </div>
    <a name="hints"></a>
    <div class="scrollblock block-hints">
        <h2>suggerimenti utili</h2>
        <p>
            GUI (Interfaccia utente grafica) per git disponibile di default<br />
            <code>gitk</code><br />
            colora gli output di git<br />
            <code>git config color.ui true</code><br />
            mostra il log in una riga per commit<br />
            <code>git config format.pretty oneline</code><br />
            utilizza l'aggiunta interattiva<br />
            <code>git add -i</code>
        </p>
    </div>
    <a name="resources"></a>
    <div class="scrollblock block-resources">
        <h2>links & risorse</h2>
        <h3>clients grafici</h3>
        <p>
        <ul>
            <li><a href="http://gitx.laullon.com/">GitX (L) (OSX, open source)</a></li>
            <li><a href="http://www.git-tower.com/">Tower (OSX)</a></li>
            <li><a href="http://www.sourcetreeapp.com/">Source Tree (OSX, free)</a></li>
            <li><a href="http://mac.github.com/">GitHub per Mac (OSX, free)</a></li>
            <li><a href="https://itunes.apple.com/gb/app/gitbox/id403388357?mt=12">GitBox (OSX)</a></li>
        </ul>
        </p>
        <h3>le guide</h3>
        <p>
        <ul>
            <li><a href="http://book.git-scm.com/">Git Community Book</a></li>
            <li><a href="http://progit.org/book/">Pro Git</a></li>
            <li><a href="http://think-like-a-git.net/">Think like a git</a></li>
            <li><a href="http://help.github.com/">GitHub Help</a></li>
            <li><a href="http://marklodato.github.com/visual-git-guide/index-en.html">A Visual Git Guide</a></li>
        </ul>
        </p>
    </div>

    <script type="text/javascript">
        /* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
        var disqus_shortname = 'git-the-simple-guide'; // required: replace example with your forum shortname

        /* * * DON'T EDIT BELOW THIS LINE * * */
        (function () {
            var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
            dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
            (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
        })();
    </script>
    <noscript>Per favore abilita JavaScript per essere in grado di vedere i <a
            href="http://disqus.com/?ref_noscript">commenti - powered by Disqus.</a></noscript>
    </div>
    <a href="http://www.git-tower.com/?source=rd"
        onClick="recordOutboundLink(this, 'Outbound Links', 'git-tower.com');return false;" class="tower"></a>
    <a href="files/git_cheat_sheet.pdf" onClick="recordOutboundLink(this, 'Cheat Sheet', 'git-guide');return false;"
        class="cheatsheet"></a>
</body>

</html>